//
// Created by snake on 2022/11/8.
//

// #ifndef AOS_ARG_H
// #define AOS_ARG_H
#pragma once

#include <string>
#include <getopt.h>

using namespace std;

struct Args {
    bool all = false;
    bool ignore_blank = false;
    bool recursive = false;
    // 默认 ""
    string suffix;
};

/**
 * 命令行参数信息->struct
 * @param argc 参数数
 * @param argv 参数数组
 * @param options 短参数配置
 * @param long_options 长参数配置
 * @return 结构体
 */
Args parse_args(int argc, char *argv[]) {
    /*
     * --all <-> -A
     * --suffix <-> -s
     */
    option long_options[] = {
            {"all",    no_argument,       nullptr, 'A'},
            {"suffix", required_argument, nullptr, 's'},
    };

    int opt, opt_idx;
    // --xxx <-> -x
    // 解析
    Args args;
    while ((opt = getopt_long(argc,
                              argv,
                              "Abrs:",
                              long_options,
                              &opt_idx)) != -1) {
        // printf("opt = %c\n", opt); // 命令参数，亦即 -a -b -n -r
        // printf("optarg = %s\n", optarg); // 参数内容
        // printf("optind = %d\n", optind); // 下一个被处理的下标值
        // printf("argv[optind - 1] = %s\n", argv[optind - 1]); // 参数内容
        // printf("option_index = %d\n", opt_idx);  // 当前打印参数的下标值
        // printf("\n");
        switch (opt) {
            case 'A':
                args.all = true;
                break;
            case 'b':
                args.ignore_blank = true;
                break;
            case 'r':
                args.recursive = true;
                break;
            case 's':
                args.suffix = optarg;
                break;
            default:
                break;
        }
    }
    return args;
}


// #endif //AOS_ARG_H
